`ifndef APB_TRANSACTION_SV
`define APB_TRANSACTION_SV


class apb_transaction extends uvm_sequence_item;

	rand logic[(`APB_MAX_ADDR_WIDTH) - 1 : 0] addr;
	rand logic[(`APB_MAX_DATA_WIDTH) - 1 : 0] wdata;
	rand logic[(`APB_MAX_DATA_WIDTH) - 1 : 0] rdata;
	rand logic[2:0]														pprot;
	rand logic[3:0]														pstrb;
	rand logic																pwrite;
	rand logic														    pslverr;
	rand logic																penable;
	rand logic																psel;

	rand int unsigned													nready_num;

	`uvm_object_utils_begin(apb_transaction)
		`uvm_field_int(wdata, 			UVM_ALL_ON)
		`uvm_field_int(rdata, 			UVM_ALL_ON)
		`uvm_field_int(pprot, 			UVM_ALL_ON)
		`uvm_field_int(pstrb, 			UVM_ALL_ON)
		`uvm_field_int(addr, 				UVM_ALL_ON)
		`uvm_field_int(pwrite, 			UVM_ALL_ON)
		`uvm_field_int(pslverr, 		UVM_ALL_ON)
		`uvm_field_int(penable, 		UVM_ALL_ON)
		`uvm_field_int(psel, 				UVM_ALL_ON)
		`uvm_field_int(nready_num, 	UVM_ALL_ON)
	`uvm_object_utils_end

	function new(string name = "apb_transaction");
		super.new(name);
	endfunction : new

endclass : apb_transaction


`endif // APB_TRANSACTION_SV
